#include<main.h>
// 初始化队列。初始化成功返回0；初始化失败返回1。
int init_queue(Queue ** q){
	(*q) = (Queue *)malloc(sizeof(Queue));
	//(*q)->rear = (*q)->front = 0;
	(*q)->size = 0;
	return 0;
}

// 在队列q的尾巴上增加一个元素，其值为value。增加成功，返回0；增加失败，返回1
int enqueue(Queue * q, int value){
	if ((*q).size == QUEUE_MAX_SIZE) {
		return 1;
	}
	(*q).elements[(*q).size] = value;
	(*q).size = ((*q).size + 1) % QUEUE_MAX_SIZE;
	return 0;
	
}

// 从队列q上摘取（去掉）一个元素，将其值放入value中。摘取成功，返回0；摘取失败，返回1。
int dequeue(Queue * q, int *value){
	int i=0;
	if ((*q).size == 0) return 1;
	*value = (*q).elements[0];
	for(i=0;i<(*q).size-1;i++){
		(*q).elements[i]=(*q).elements[i+1];
	}
	(*q).size--;
	return 0;
}

// 获取队列q的第一个元素，但是并不去掉该元素，并将该值放入value中。获取成功返回0；获取失败，返回1。 
int first(Queue * q, int * value){
	if ((*q).size == 0) return 1;
	*value = (*q).elements[0];
	return 0;
}

// 判断队列q是否为空。为空，返回0；不为空，返回1。 
int is_empty(Queue * q){
	if ((*q).size == 0) return 0;
	else return 1;
}

// 返回队列q中的元素个数。 
int size(Queue * q){
	return (*q).size;
}
int main(){
	int i = 0,value = 0;
	Queue *q;
	init_queue(&q);
	for(i=0;i<10;i++)
		enqueue(q,i);
	printf("%d\n",(q->size));
	dequeue(q,&value);
	first(q,&value);
	printf("%d\n",value);
	enqueue(q,11);
	printf("%d",q->elements[9]);
	//printf("%d\n",(q->size));
	system("pause");
}
